package com.atguigu.order.controller;

import com.atguigu.order.bean.Order;
import com.atguigu.product.bean.Product;
import com.atguigu.vo.SearchVO;
import com.atguigu.product.ProductFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/order")
@SuppressWarnings("all")
public class OrderController {

    @Autowired
    private ProductFeignClient productFeignClient;

    @GetMapping("/getProduct")
    public String getProduct() {
        log.info("通过openfeign 远程 调用 product 服务");
        return productFeignClient.getProduct();
    }

    @GetMapping("/get")
    public String get() {
//        try {
//            TimeUnit.SECONDS.sleep(3);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        log.info("get 调用 order 服务");
        return "get 请求 order 服务";
    }

    @GetMapping("/get2/{id}")
    public String get2(@PathVariable("id") Long id) {
        log.info("get2 请求 order 服务");
        return "get2 请求 order 服务" + id;
    }

    @GetMapping("/get3")
    public String get3(@RequestParam(name = "id") Long id) {
        log.info("get3 调用product 服务");
        return "get3 请求 order 服务" + id;
    }

    @PostMapping("/get4")
    public String get4(@RequestBody SearchVO searchVO) {
        log.info("get4 调用 product 服务");
        return "get4 请求 order 服务" + searchVO.getId();
    }

    @GetMapping("/createOrder")
    public Order createOrder() {
        List<Product> productList = List.of(
                Product.builder().id(1L).price(new BigDecimal("100")).productName("汽车").num(1).build(),
                Product.builder().id(2L).price(new BigDecimal("200")).productName("别墅").num(2).build()
        );

        Order order = Order.builder()
                .id(9999999999L)
                .totalAmount(productList.stream().map(Product::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add))
                .userId(1L)
                .nickName("李白")
                .address("河南省郑州市")
                .productList(productList)
                .build();
        return order;
    }
}
